﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocio.servicios;
using negocio.entidades;

namespace Swimmers.form
{
    public partial class Nadador : System.Web.UI.Page
    {
        private enum State { Agregar, Editar, Ver }

        private NadadorService nadadorService = new NadadorService();
        private BarrioService barrioService = new BarrioService();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                panelGrilla.Visible = true;
                panelFormulario.Visible = false;
                CargarCombos();
                CargarGrilla();
            }
        }

        private void CargarGrilla()
        {
            gvNadadores.AllowPaging = true;
            gvNadadores.DataSource = nadadorService.ObtenerTodo(); ;
            string[] keys = new string[1];
            keys[0] = "id_nadador";
            gvNadadores.DataKeyNames = keys;
            gvNadadores.DataBind();
        }

        private void CargarCombos()
        {
            cmbBarrio.DataSource = barrioService.ObtenerTodo();
            cmbBarrio.DataTextField = "Nombre";
            cmbBarrio.DataValueField = "Id";
            cmbBarrio.DataBind();
            cmbBarrio.SelectedIndex = -1;
            cmbBarrio.Items.Insert(0, " ");
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            Guardar();
            panelFormulario.Visible = false;
            panelGrilla.Visible = true;
        }

        private void Guardar()
        {
            if (Page.IsValid)
            {
                if ((State)Session["estado"] == State.Agregar)
                {
                    nadadorService.Insertar(MapFormToNadador());
                }
                else if ((State)Session["estado"] == State.Editar)
                {
                    nadadorService.Modificar(MapFormToNadador());
                }
            }
            CargarGrilla();
        }


        private negocio.entidades.Nadador MapFormToNadador()
        {
            negocio.entidades.Nadador nadador = new negocio.entidades.Nadador();
            nadador.Id = Int32.Parse(txtNroAfiliado.Text);
            nadador.Nombre = txtNombre.Text;
            nadador.Apellido = txtApellido.Text;
            nadador.email = txtEmail.Text;
            nadador.FechaNacimiento = DateTime.Parse(txtFechaNacimiento.Text);
            nadador.tel1 = txtTelefono1.Text;
            if (txtTelefonoAlt.Text.Length != 0)
            {
                nadador.tel2 = txtTelefonoAlt.Text;
            }
            else
            {
                nadador.tel2 = "0";
            }
           
            if (rblSexo.SelectedIndex == 1)
            {
                nadador.sexo = 1;
            }
            else if (rblSexo.SelectedIndex == 0)
            {
                nadador.sexo = 0;
            }
            nadador.FechaNacimiento = DateTime.Parse(txtFechaAlta.Text);
            nadador.IdBarrio = Convert.ToInt32(cmbBarrio.SelectedValue);
            return nadador;
        }

        private void MapNadadorToForm(negocio.entidades.Nadador n)
        {
            if (Session["estado"].Equals(State.Editar))
            {
                txtNroAfiliado.Enabled = false;
            }
            txtNroAfiliado.Text = n.Id.ToString();
            txtNombre.Text = n.Nombre;
            txtApellido.Text = n.Apellido;
            txtFechaNacimiento.Text = n.FechaNacimiento.ToShortDateString();
            txtFechaAlta.Text = n.FechaIngreso.ToShortDateString();
            txtTelefono1.Text = n.tel1;
            txtTelefonoAlt.Text = n.tel2;
            txtEmail.Text = n.email;
            cmbBarrio.SelectedValue = n.IdBarrio.ToString();
            if (n.sexo == 0)
            {
                rblSexo.SelectedIndex = 0;
            }
            else
            {
                rblSexo.SelectedIndex = 1;
            }

        }

        protected void cmdAgregar_Click(object sender, EventArgs e)
        {
            Session["estado"] = State.Agregar;
            panelFormulario.Visible = true;
            panelGrilla.Visible = false;
            HabilitarCampos();
            btnAceptar.Visible = true;
            btnCancelar.Text = "Cancelar";
            txtNroAfiliado.Visible = true;
            LimpiarCampos();
            txtNroAfiliado.Enabled = false;
            txtNroAfiliado.Text = nadadorService.obtenerNuevoId().ToString();
            txtFechaAlta.Text = DateTime.Today.ToShortDateString();
            txtFechaAlta.ReadOnly = true;
        }

        private void HabilitarCampos()
        {
            txtNombre.Enabled = true;
            txtApellido.Enabled = true;
            txtEmail.Enabled = true;
            txtFechaNacimiento.Enabled = true;
            txtTelefono1.Enabled = true;
            txtTelefonoAlt.Enabled = true;
            cmbBarrio.Enabled = true;
        }

        private void LimpiarCampos()
        {
            txtNombre.Text = "";
            txtApellido.Text = "";
            txtFechaNacimiento.Text = "";
            txtEmail.Text = "";
            txtTelefono1.Text = "";
            cmbBarrio.ClearSelection();
            txtTelefono1.Text = "";
            txtTelefonoAlt.Text = "";
            gvNadadores.SelectedIndex = -1;
        }

        protected void cmdEditar_Click(object sender, EventArgs e)
        {
            Session["estado"] = State.Editar;
            panelFormulario.Visible = true;
            panelGrilla.Visible = false;
            negocio.entidades.Nadador nadador = nadadorService.ObtenerPorId(Convert.ToInt32(gvNadadores.SelectedValue));
            MapNadadorToForm(nadador);
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            panelFormulario.Visible = false;
            panelGrilla.Visible = true;
            panelID.Visible = true;
            LimpiarCampos();
        }

        protected void cmdEliminar_Click(object sender, EventArgs e)
        {
            nadadorService.Eliminar(Convert.ToInt32(gvNadadores.SelectedValue));
            CargarGrilla();
            panelFormulario.Visible = false;
            panelGrilla.Visible = true;
        }

        protected void gvNadadores_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvNadadores.PageIndex = e.NewPageIndex;
            CargarGrilla();
        }

        protected void cmdBuscarNombre_Click(object sender, EventArgs e)
        {
            if (txtNombreBuscar.Text.Length != 0)
            {
                gvNadadores.DataSource = nadadorService.ObtenerPorId(Int32.Parse(txtNombreBuscar.Text));
                gvNadadores.DataBind();
            }
        }

        protected void cmdRecargarGrilla_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        protected void gvNadadores_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[0].Text = "Seleccionar";
                e.Row.Cells[1].Text = "Documento";
                e.Row.Cells[2].Text = "Nombre";
                e.Row.Cells[3].Text = "Apellido";
                e.Row.Cells[4].Text = "Email";
                e.Row.Cells[5].Text = "Fecha de nacimiento";
                e.Row.Cells[6].Text = "Sexo";
                e.Row.Cells[7].Text = "Telefono";
                e.Row.Cells[8].Text = "Telefono alternativo";
                e.Row.Cells[9].Text = "Fecha ingreso";
                e.Row.Cells[10].Text = "Barrio";
            }
        }
    }
}